import 'package:flutter/material.dart';

// 自定义绘制类PosePainter，用于绘制图像上的人体关键点
class PosePainter extends CustomPainter {
  final List<dynamic> poses; // 人体姿态识别结果的列表
  final List<Offset> points; // 需要绘制的关键点坐标列表
  final Size imageSize; // 原始图像的尺寸

  // 构造函数，初始化时接收姿态数据、关键点和图像尺寸
  PosePainter(this.poses, this.points, this.imageSize);

  @override
  void paint(Canvas canvas, Size size) {
    final paint = Paint()
      ..style = PaintingStyle.fill // 画笔样式为填充
      ..color = Colors.red // 关键点的颜色设置为红色
      ..strokeWidth = 6.0; // 设置画笔的宽度

    for (var point in points) {
      // 循环遍历所有关键点，绘制每个点
      // Offset对象创建一个点的位置，point.dx和point.dy是点的原始数据坐标
      // size.width和size.height是当前绘制区域的宽度和高度，用来将关键点位置调整到当前画布大小
      canvas.drawCircle(Offset(point.dx * size.width, point.dy * size.height), 10, paint);
    }
  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    // 这里简单返回true，表示每次绘制时都需要重绘
    // 可以根据实际情况优化，比如只有在数据更新时才重绘
    return true;
  }
}